package com.qf.pojo;

import java.util.Collection;
import java.util.LinkedHashMap;
import java.util.Map;

/**
 * @author 高圆圆
 * @date 2023/6/6 12:00
 * 购物车实体
 */
public class Cart {

    //包含购物车项
    //Key:购物车项里面的商品编号
    //Value:购物车项CartItem
    private Map<String,CartItem> map = new LinkedHashMap<>() ;



    private double totalMoney ; //总金额


    //定义一个功能:获取Map(购物车)中所有的购物项Map--->Collection<V> values()获取Map集合中的值
    public Collection<CartItem> getCartItems(){//getCartItems()---->get()去掉--->首字母小写 cartItems
        return map.values() ;
    }

    public Cart() {
    }

    public Map<String, CartItem> getMap() {
        return map;
    }

    public void setMap(Map<String, CartItem> map) {
        this.map = map;
    }

    public double getTotalMoney() {
        return totalMoney;
    }

    public void setTotalMoney(double totalMoney) {
        this.totalMoney = totalMoney;
    }

    /**
     * 将购物车项CartItem添加到购物车中
     * @param cartItem 添加到购物项实体
     */
    public void addCartItemToCart(CartItem cartItem) {

        //1)从购物车中获取商品Product
        Product product = cartItem.getProduct();
        //2)获取商品实体的pid
        String pid = product.getPid();
        //3)判断Map中是否包含pid
        if(map.containsKey(pid)){
            //购物车项在重复添加
            //通过键 获取值
            CartItem oldCartItem = map.get(pid); //获取以前添加的购物项
            //设置购物项里面的商品数量
            oldCartItem.setCount(oldCartItem.getCount()+1) ;
        }else{
            //pid没有重复添加
            map.put(pid,cartItem) ;
        }

        //购物车里面的总金额
        totalMoney += cartItem.getSubMoney() ;
    }

    /**
     * 将购物车项从购物车中删除
     * @param pid 购车项中包含的商品id
     */
    public void removeCartItemFromCart(String pid){
        //通过Map购物车将pid对应的CartItem删除
        CartItem cartItem = map.remove(pid); //返回被删除的购物车项
        //总金额需要减去 购物车项里面的小计
        totalMoney = totalMoney - cartItem.getSubMoney() ;
    }

    /**
     * 清空Map集合(清空购物车)
     */
    public void clear(){
        map.clear();
        totalMoney = 0.0;
    }
}
